package com.k8.common.factroy;

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.atomic.AtomicInteger;

public class BeanInfo<T> {//实例化成功

    /**
     * -1 失效
     * 0 init
     * 1 created 对象创建成功
     * 2 posted  后置处理结束
     * 3 success 此时已经是一个完成的bean，但是还可以执行某些回调，执行完成后首先表示自己成功了
     * 4 再去检测所有注入的元素是否为3状态，成功则设置为4
     */

    public BeanInfo(Class<T> type) {
        this.type = type;
    }

    private final AtomicInteger state = new AtomicInteger(1);
    private final Class<T> type;
    volatile T value;

    public int state() {
        return state.get();
    }

    //设置为-1和setValue的权限只有实例化的线程有，所以是同一个线程进行操作，没有并发处理countDownLatch的风险
    public void state(int state) {
        this.state.set(state);
    }

    public AtomicInteger getState() {
        return state;
    }

    public Class<T> getType() {
        return type;
    }

    public T getValue() {
        return value;
    }

    public void setValue(T value) {
        this.value = value;
    }
}
